package com.mr.security.web.webapp.rbac.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

/**
 * Class: UserDetailService
 * User (作者):MRui
 * TODO (描述)：自定义用户认证逻辑（用户详细信息）（需要自己实现用户信息查询，权限查询等）
 * Date 2019-01-17 22:51
 */
@Slf4j
@Component//注册为spring bean
public class UserDetailService implements UserDetailsService {

    //注入user查询sql（jpa/mybatis）

    /** 注入password 加密类（需注册为javabean） */
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private UserCheckService userCheckService;

    /**
    * User (作者): MRui
    * TODO (描述)：用户登陆验证（需要实现数据库查询）
    * Data：2019-01-17 23:29
    */
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        //1.根据用户名查找用户信息
        log.info("用户名："+s);

        //2.根据查找到用户信息是否被冻结（4种方法见UserDetails实现）

        userCheckService.isAccountNonExpired();
        return new User(s,//用户名
                        passwordEncoder.encode("123456"),//，密码，权限
                true, //是否可用
                true, //是否过期
                true,//密码是否过期
                true,//是否锁定
                        AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));//权限
    }
}
